package edu.pucsp.predatorprey.simulador.java.criatura;

import edu.pucsp.predatorprey.simulador.java.posicao.impl.Direcao;

public class Predador extends AbstractCriatura {

	private static final int INTERVALO_MOVIMENTO = 1;

	private static final int INTERVALO_PROCRIACAO = 90;

	private static final int INTERVALO_MORTE_FOME = 120;

	private int cicloComida = 0;

	@Override
	public boolean deveMorerCausasNaturais() {
		return this.ciclo - this.cicloComida >= INTERVALO_MORTE_FOME || Math.random() > 0.997;
	}

	@Override
	public void comeu() {
		this.cicloComida = this.ciclo;
	}

	@Override
	protected Direcao getDirecao() {
		if (this.ciclo - this.cicloComida <= INTERVALO_MORTE_FOME / 2 && this.aptoParaProcriar()) {
			Direcao direcaoPredador = this.getDirecaoPredador(Integer.MAX_VALUE);
			if (direcaoPredador != null) {
				return direcaoPredador;
			}
		}
		if (this.ciclo - this.cicloComida >= INTERVALO_MORTE_FOME / 3) {
			Direcao direcaoPresa = this.getDirecaoPresa(Integer.MAX_VALUE);
			if (direcaoPresa != null) {
				return direcaoPresa;
			}
		}
		return this.getDirecaoAleatoria();
	}

	@Override
	protected int getIntervalorProcriacao() {
		return INTERVALO_PROCRIACAO;
	}

	@Override
	public boolean isPredador() {
		return true;
	}

	@Override
	protected int getIntervaloMovimento() {
		return INTERVALO_MOVIMENTO;
	}

	@Override
	public String toString() {
		return "Predador";
	}

}
